package com.springboot.springmvc.restful.crud.controller;

import com.springboot.springmvc.restful.crud.bean.Employee;
import com.springboot.springmvc.restful.crud.common.R;
import com.springboot.springmvc.restful.crud.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*

CORS policy:同源策略；限制ajax请求，图片，css，js）
跨源资源共享
浏览器为了安全，默认会遵循同源策略（请求要去的服务器和当前项目所在的服务器必须是同一个源[同一个服务器]），如果不是，请求就会被拦截
 *    复杂的跨域请求会发送2次：
 *    1、options 请求：预检请求。浏览器会先发送options请求，询问服务器是否允许当前域名进行跨域访问
 *    2、真正的请求：POST、DELETE、PUT等


 浏览器页面所在的：http://localhost   /employee/base
 * 页面上要发去的请求：http://localhost:8080   /api/v1/employees
 *  /以前的东西，必须完全一样，一个字母不一样都不行。浏览器才能把请求（ajax）发出去。

  跨域问题：
 *    1、前端自己解决：
 *    2、后端解决：允许前端跨域即可
 *          原理：服务器给浏览器的响应头中添加字段：Access-Control-Allow-Origin = *
*/

@CrossOrigin//允许跨域访问
@RequestMapping("/api/v1")
@RestController
public class EmployeeRestController {
    @Autowired
    EmployeeService employeeService;
    //按照id查询员工
    @RequestMapping(value = "/employee/{id}",method = RequestMethod.GET)//大括号中路径为动态：其中的值最终会封装到id中
    //@GetMapping("/employee/{id}") 简化写法
    public R get(@PathVariable("id") Long id)//@PathVariable("id")注解：将url中的动态值，绑定到形参上
    {
        System.out.println("查询方法执行.....");
        return R.success(employeeService.getEmp(id));
    }

    @RequestMapping(value = "/employee/{id}",method = RequestMethod.DELETE)
    //@DeleteMapping("/employee/{id}") 简化写法
    public R delete(@PathVariable("id") Long id)
    {
        employeeService.deleteEmp(id);
        return R.success();
    }
    //新增员工
    //要求：员工信息放在请求体
    @RequestMapping(value = "/employee",method = RequestMethod.POST)
    public R add(@RequestBody Employee employee){

        employeeService.saveEmp(employee);
        return R.success();
    }

    //修改员工信息
    //要求:前端发送请求把员工json放在请求体中
    @RequestMapping(value = "/employee",method = RequestMethod.PUT)
    public R update(@RequestBody Employee employee){
        employeeService.updateEmp(employee);
        return R.success();
    }

    //查询所有员工
    @RequestMapping(value = "/employees",method = RequestMethod.GET)
    public R all(){
        List<Employee> employees = employeeService.getList();
        return R.success(employees);
    }
}
